"""
encoding = 'utf-8'
@author : ffine
@time   : 2022-05-03  20:00
@IDEA   : PyCharm
@goal   : 列表推导式
"""
# 列表推导式
# 列表推导式是Python内置的非常有用的可以用来创建列表的语法结构。
# 列表推导式是一种特殊的列表赋值语句，它的语法形式如下：
# [表达式 for 变量 in 可迭代对象 if 条件]
# 其中，表达式是必须的，可以是任何有效的Python表达式，它可以是任何类型的值，包括可迭代对象，字典，集合等等。
# 变量是可选的，如果没有变量，就像是一个表达式一样，表达式的值就是列表的元素。
res = [x * x for x in range(10)]
print(res)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

result = [x * x for x in range(10) if x % 2 == 0]
print(result)  # [0, 4, 16, 36, 64]


# 列表推导式的另一个重要特性是，它可以使用多个变量，这样就可以组成一个非常强大的表达式，比如：
# [变量1[0] + 变量2[0] for 变量1 in 可迭代对象1 if 变量1[0] > 变量2[0] for 变量2 in 可迭代对象2]
# 其中，变量1和变量2是必须的，可以是任何有效的Python表达式，它可以是任何类型的值，包括可迭代对象，字典，集合等等。
result = [x[0] + y[0] for x in [[7, 2], [7,4]]  for y in [[7, 5], [6, 7]] if x[0] >= y[0]]
print(result)  # [14, 13, 14, 13]


res = [x + y for x in 'ABCDE' for y in '12345']
print(res)  # ['A1', 'A2', 'A3', 'A4', 'A5', 'B1', 'B2', 'B3', 'B4', 'B5', 'C1', 'C2', 'C3', 'C4', 'C5', 'D1', 'D2', 'D3', 'D4', 'D5', 'E1', 'E2', 'E3', 'E4', 'E5']


# 序列 元组 字典 字符串 列表
res = tuple(x * x for x in range(10))
print("元组",res)  # (0, 1, 4, 9, 16, 25, 36, 49, 64, 81)


res = dict((x, x * x) for x in range(10))
print("字典",res)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
result = {x: x * x for x in range(4,7)}
print("字典",result)  # {4: 16, 5: 25, 6: 36}
resu = {x: y*y for x in 'ABCDE' for y in [1,2,3,4,5] if x != 'C'}
print("字典",resu)  # {'A': 0, 'B': 1, 'C': 2, 'D': 3, 'E': 4}

res = '-'.join(x + y for x in 'ABC' for y in '345')
print("字符",res)  # A3-A4-A5-B3-B4-B5-C3-C4-C5


# 集合是无序的，不重复的元素集合，这是一个可变的有序集。
res = {x for x in 'aacc121'}
print("集合",res)  # {'c', 'a', '2', '1'}
res = set(x * x for x in range(10))
print("集合",res) # {0, 1, 64, 4, 36, 9, 16, 49, 81, 25}
